index
4장
애플리케이션 간 접근 제한의 필요성
웹 어플리케이션에서개인 정보 보호를 하려면 다른 앱 어플리케이션에서의 접속을 제한해야 한다.
동일 출처 정책에 의한 보호
-
인터넷 리소스를 공개할 때는 다른 웹 어플리케이션에서 접속을 반드시 제한해야 한다.
-
브라우저는 웹 어플리케이션 사이에 출처라는 경계를 설정해 서로의 접근을 제한한다.
교차 출처
- 스키마, 호스트, 포트번호, 경로가 다른것을 교차 출처라 칭한다.
교차 출처 요소
WEB STORAGE,CANVAS,IFRAME등이 이에 속한다.
CORS
-
CDN같이 믿을 수 있는 출처라면 동일 출처가 아닌 교차 출처를 이용해도 문제가 발생할 수 있다 -
이를 우회하기 위해 사용하는 것을
출처 간 리소스 공유 방식을 사용한다.
CORS 방식
단순 요청
-
GET또는POST로 전송하는 기본 요청을단순 요청이라 칭한다. -
CORS의 스펙이 기재된Fetch Standard에서CORS - safelisted로 간주되는HTTP 메소드와HTTP 해더만을 전송하는 요청을 의미한다. -
Access - Control - Orgin헤더를 사용할 해 접근을 허가할 수 있다.
Preflight Request
-
Access - Control - Orgin헤더는js 엔진이 받아온 리소스에 접근할 수 있도록 허용하는 것일 뿐이다. -
이에 따라 만일 피싱사이트로 사용자의 정보를 탈취해 공격을 한다면, 서버는 막을 방법이 없다.
-
그렇기에 서버에선 합의된 요청많을 받을 수 있도록 해야하는데,
PUT,DELETE만을 가능한다.
CORS 요청 모드
- 프론트에서도 fetch 에서
cors 모드를 조절할 수 있다,
| 모드 | 설명 | 특징 | 사용 사례 |
|---|---|---|---|
| cors | 기본값. 교차 출처 요청을 허용하지만 CORS 규칙 준수 필요 | - 서버에서 적절한 CORS 헤더 필요 - 권한 있는 요청(credentials)도 가능 - 응답 본문에 완전히 접근 가능 | - 대부분의 API 호출 - 서버가 CORS를 지원하는 경우 |
| same-origin | 같은 출처(도메인)로만 요청 허용 | - 다른 출처로 요청 시 TypeError 발생 - 가장 엄격한 보안 설정 | - 내부 API 호출 - 민감한 작업 수행 시 |
| no-cors | CORS 검사를 우회하지만 제한된 응답만 가능 | - 응답이 "opaque"(불투명)하게 처리됨 - 응답 본문 접근 불가 - 상태 코드 확인 불가 - 헤더 읽기 불가 | - 이미지, 스크립트 등 정적 자원 가져오기 - 단순 GET 요청으로 캐싱만 필요한 경우 |
| navigate | HTML 문서 탐색용 | - 브라우저 내부적으로 사용 - 개발자가 직접 사용하지 않음 | - 브라우저가 내부적으로 사용 |
cross-origin
- 보통 HTML에서 사용하는
<img>,<script>이를cross-origin속성을 이용해서 제한할 수 있다.
프로세스 분리에 따른 사이드 채널 공격 대책
- 동일 출처 정책으로는 막을 수 없는 하드웨어와 같은 부분에 대한
사이드 채널 공격이 존재한다.
사이드 채널 공격을 방어하는 site isolation
-
스펙터는 접근 불가능한 메모리 안의 데이터에 대해 추측이 가능한 것이 입증 되었다. -
보통 프로그램은
프로세스 단위로 프로그램을 처리하는데, 이 메모리 접근 영역을 나눠서 프로그램을 이렇게 나눠진 단위를 `Site Isolation`` 이라 칭한다.
출처마다 프로세스를 분리하는 구조
- 출처 단위의 공격에서 이를 막지 못하는데
- 사이드 채널 공격이 발생하지 않음을 보장해야한다.
- 이 분리 구조를
CROSS - ORIGIN - ISOLATION이라 칭한다.
이를 위해 3가지 응답 헤더를 사용하는데
- CORP , COEP, COOP 등이 있다.
1. CORP (Cross-Origin Resource Policy)
리소스 자체를 보호하는 헤더 서버가 어떤 출처에서 해당 리소스를 로드할 수 있는지 지정
값: same-origin, same-site, cross-origin 예: Cross-Origin-Resource-Policy: same-origin
2. COEP (Cross-Origin Embedder Policy)
문서가 다른 출처의 리소스를 로드할 때 적용되는 정책 명시적으로 공유를 허용한 리소스만 로드되도록 강제
값: require-corp는 모든 리소스가 CORP 헤더로 공유 허용해야 함 예: Cross-Origin-Embedder-Policy: require-corp
3. COOP (Cross-Origin Opener Policy)
문서가 다른 출처의 창(window)과 어떻게 상호작용할지 제어 창 간의 참조를 제한해 정보 유출 방지
값: same-origin, same-origin-allow-popups, unsafe-none 예: Cross-Origin-Opener-Policy: same-origin